In many computer graphics applications, such as animated movies and video games, textures are applied to objects to make the object appear more realistic. Textures can be divided into two main categories: image textures, and procedural textures. As its name suggests, an image texture is an image, and rendering an image textured object can be viewed as painting a bitmap onto a portion of a two-dimensional plane. In contrast, procedural textures apply a programmable function to an object. Rendering a procedural texture object can be viewed as placing an object in a three-dimensional procedural texture space, so that the object has the appearance of being from that texture.
Both types of textures suffer from an artifact called aliasing when rendering. Techniques to reduce aliasing (i.e., anti-aliasing techniques) for image textures are well known, but these techniques do not lend themselves to solving the procedural texture anti-aliasing problem. The fundamental assumptions that allow these methods to work in image textures are violated in most interesting procedural textures. For example, the most important assumption in image textures is that given a region of the texture, the average color is known. The atomic unit of an image texture is a pixel, which is a color over a region of area. The atomic unit of a procedural texture is an infinitesimal point which has no area. Thus, the average color over a region is not generally known for procedural textures.
The task of anti-aliasing a procedural texture can be extremely difficult even when done by hand. Often the programmer time to create a procedural texture is less than the time to create the anti-aliasing code for the same texture. A particular kind of aliasing, called minification aliasing, occurs when a textured object is viewed from far enough away that the texture contains frequencies in screen space that are higher than the Nyquist frequency given by the sampling rate of the renderer. Minification aliasing is especially distracting during motion sequences, and this is a major problem for rendering procedural textures. Thus, a need arises to address these and other deficiencies.